<?php
/**@brief Modelo de Turma
 *
 * Devido ao framework Spaguetti, não é necessário nenhum atributo nesta classe, ou métodos.
 * Os atributos e métodos são referentes a configuração de chave estrangeira, e ações
 * que devem ser realizadas antes de salvar ou deletar algum objeto.
 */
class Turma extends AppModel
{
    public $belongsTo =array(
        "Users" => array("foreignKey" => "users_id"),
        "Disciplina" =>array("foreignKey" => "disciplina_id")
        );
    
    public $hasMany = array("Diario");

    public $validates = array(
    "id" =>array(array("rule" => "notEmpty","message" => "O código não pode estar em branco!"),
                       array("rule" => array("minLength","3"),"message" => "O código deve conter 6 digitos!"),
                       array("rule" => array("maxLength","4"),"message" => "O código deve conter 6 digitos!")
                       ),
    "disciplina_id"=>array(array("rule" => "notEmpty","message" => "O código não pode estar em branco!"),
                       array("rule" => array("minLength","6"),"message" => "O código deve conter 6 digitos!"),
                       array("rule" => array("maxLength","6"),"message" => "O código deve conter 6 digitos!")
                       )
     );


    public function save($data)
    {
        // pega a data/hora
        $date = date("Y-m-d H:i:s");

        //se tem o campo modified seta-o
        if(isset($this->schema["modified"]) && !isset($data["modified"])):
            $data["modified"] = $date;
        endif;

        //verifica se o objeto já existe no banco
        $exists = $this->exists($data["disciplina_id"],$data["id"]);

        //se não existia no banco então eu seto o campo "created"
        if(!$exists && isset($this->schema["created"]) && !isset($data["created"])):
            $data["created"] = $date;
        endif;

        //executa o metodo beforeSave()
        if(!($data = $this->beforeSave($data))) return false;

        //se já existia
        if($exists):
            $save = $this->update(array(
                "conditions" => array("disciplina_id" => $data["disciplina_id"], 
                                      "id"            => $data["id"]),
                "limit" => 1
            ), $data);
            $created = false;
        else:           //se não existia
            $save = $this->insert($data);       //será um insert
            $created = true;
            
        endif;

        //executa o metodo afterSave()
        $this->afterSave($created);
        return $save;

    }

    public function exists($disciplina_id ,$id)
    {
        $conditions = array_merge(
            $this->conditions,
            array(
                "conditions" => array(
                    "disciplina_id" => $disciplina_id,
                    "id"            => $id
                    )
            )
        );
        $row = $this->first($conditions);
        return !empty($row);
    }

    public function delete($disciplina_id, $id, $dependent = true)
    {
        $db =& self::getConnection($this->environment);

        //parametros para o objeto ser deletado
        $params = array("conditions" => array("id"            => $id,
                                              "disciplina_id" => $disciplina_id
                                             ),
                        "limit" => 1
                       );
        
        if($this->exists($disciplina_id,$id))// se o objeto existe
        {
            if($dependent) //é pra apagar os dependentes
                $this->deleteDependent($disciplina_id,$id);//apaga os dependetes
            $this->deleteAll($params);//apaga o objeto
            return true;
        }
        return false;
        
    }

    public function deleteDependent($disciplina_id,$id)
    {
        foreach(array("hasOne", "hasMany") as $type):
            foreach($this->{$type} as $model => $assoc):
                $this->{$assoc["className"]}->deleteAll(array("conditions" => array(
                                                                              "disciplina_id"      => $disciplina_id,
                                                                              "turma_id"           => $id
                )));
            endforeach;
        endforeach;
        return true;
    }



}

?>
